/**
 * XDevice 配置文件解析模块
 */

#ifndef XDEVICE_CONFIG_H
#define XDEVICE_CONFIG_H

#include <xdevice/xdevice.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/* 配置结构定义 */
typedef struct {
    char node_id[64];
    char data_dir[XDEVICE_MAX_PATH_LEN];
    int log_level;
    char log_file[XDEVICE_MAX_PATH_LEN];
} xdevice_general_config_t;

typedef struct {
    char listen_address[256];
    int listen_port;
    int connection_timeout;
    int read_timeout;
    int write_timeout;
    int max_connections;
} xdevice_network_config_t;

typedef struct {
    int election_timeout_min;
    int election_timeout_max;
    int heartbeat_interval;
    int log_compaction_threshold;
    int snapshot_interval;
} xdevice_raft_config_t;

typedef struct {
    char wal_dir[XDEVICE_MAX_PATH_LEN];
    char wal_file_size[32];  // 如 "64MB"
    int wal_sync_interval;
    int data_block_size;
    char cache_size[32];     // 如 "128MB"
    bool compression_enabled;
    char compression_algorithm[32];
    
    // 多存储后端配置
    char local_path[XDEVICE_MAX_PATH_LEN];      // 主存储后端路径
    char secondary_path[XDEVICE_MAX_PATH_LEN];  // 第二个存储后端路径
    char tertiary_path[XDEVICE_MAX_PATH_LEN];   // 第三个存储后端路径
    char nvmf_target[512];   // NVMe-oF目标地址
    char nfs_mount[512];     // NFS挂载点
    
    xdevice_storage_type_t primary_backend;
    xdevice_storage_type_t secondary_backend;
    xdevice_storage_type_t tertiary_backend;
    xdevice_storage_type_t fallback_backend;
} xdevice_storage_config_t;

typedef struct {
    char nodes[XDEVICE_MAX_NODES][256];  // 节点地址列表
    int node_count;
    int default_replica_count;
    int failure_detector_interval;
    int failure_detector_timeout;
} xdevice_cluster_config_t;

typedef struct {
    int io_threads;
    int worker_threads;
    int batch_size;
    char max_memory_usage[32];
    int gc_threshold;
} xdevice_performance_config_t;

typedef struct {
    bool tls_enabled;
    char tls_cert_file[XDEVICE_MAX_PATH_LEN];
    char tls_key_file[XDEVICE_MAX_PATH_LEN];
    char tls_ca_file[XDEVICE_MAX_PATH_LEN];
    bool auth_enabled;
    char auth_method[32];
} xdevice_security_config_t;

/* Raft实例配置 */
typedef struct {
    int node_id;
    char data_dir[XDEVICE_MAX_PATH_LEN];
    xdevice_storage_type_t storage_backend;
    char storage_path[XDEVICE_MAX_PATH_LEN];
} xdevice_raft_instance_config_t;

/* 完整配置结构 */
typedef struct {
    xdevice_general_config_t general;
    xdevice_network_config_t network;
    xdevice_raft_config_t raft;
    xdevice_storage_config_t storage;
    xdevice_cluster_config_t cluster;
    xdevice_performance_config_t performance;
    xdevice_security_config_t security;
    
    // 多Raft实例配置
    xdevice_raft_instance_config_t raft_instances[XDEVICE_MAX_NODES];
    int raft_instance_count;
    
    char config_file[XDEVICE_MAX_PATH_LEN];
    bool loaded;
} xdevice_config_t;

/* 配置解析API */

/**
 * 加载配置文件
 * @param config_file 配置文件路径
 * @return 配置结构体，失败返回NULL
 */
xdevice_config_t* xdevice_config_load(const char* config_file);

/**
 * 释放配置结构体
 * @param config 配置结构体
 */
void xdevice_config_free(xdevice_config_t* config);

/**
 * 验证配置有效性
 * @param config 配置结构体
 * @return XDEVICE_OK成功，否则失败
 */
int xdevice_config_validate(const xdevice_config_t* config);

/**
 * 创建默认配置
 * @return 默认配置结构体
 */
xdevice_config_t* xdevice_config_create_default(void);

/**
 * 配置相关工具函数
 */
size_t xdevice_config_parse_size(const char* size_str);  // 解析如"64MB"的大小字符串
int xdevice_config_get_node_id_numeric(const char* node_id);  // 从节点ID获取数字ID

#ifdef __cplusplus
}
#endif

#endif // XDEVICE_CONFIG_H
